package fr.esisar.cs420.traitement;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * Classe      : Images
 * Explication : Classe permettant de gérer les images
 * @author Hermitte : Dieng : Delay
 *
 */
public class Images {
	
	/**
	 * Méthode permettant d'afficher une image présente dans la table Album
	 * @param idImage : identifiant de l'image
	 * @return InfoImage
	 */
	public static InfoImage afficherImage(int idImage ){
		
		String select = " SELECT idImage , i.chemin FROM Image i ";
		
		boolean trouve = true;	
		int tmp = 1 ;
		InfoImage image = null ;
	
				
		try {
			
			/* Recuperation de la connection a la base de donnee */
			Statement stmt = Application.getStmt();
			/* Execution de la commande */
			stmt.executeUpdate("SET TRANSACTION READ ONLY");
			ResultSet res = stmt.executeQuery(select);
					
			while(trouve){
				
				/* l'image n'existe pas */
				if (res.next() == false ){
					image = null ;
					trouve = false;
					
				}
				else{
					/* on a trouvé l'image*/
					if(tmp == idImage){
						
						image = new InfoImage(res.getInt(1),res.getString(2));
						trouve = false;
					}
					/*on passe à l'image suivante */
					else{
						tmp++;
					}
					
				}
			}
						
		} catch (SQLException e) {
			System.out.println("Erreur");
			e.printStackTrace();
		}
		
		return image;
		
	}
	
	/**
	 * Méthode permettant d'obtenir les informations d'une image
	 * @param idAlbum  : Identifiant de l'album
	 * @param ordre    : Ordre de l'image
	 * @return InfoImage
	 */
	public static InfoImage GetInfoImage(int idAlbum, int ordre)
	{
		
		String select = " SELECT c.idImage , c.titre , c.commentaire , c.numOrdre FROM Album a , AlbumContient c  where c.idAlbum = a.idAlbum and a.idAlbum =  '" + idAlbum + "' and c.numOrdre = " + ordre;
		
		InfoImage image = null;
		
		try {
			/* Recuperation de la connection a la base de donnee */
			Statement stmt = Application.getStmt();
			/* Execution de la commande */
			stmt.executeUpdate("SET TRANSACTION READ ONLY");
			ResultSet res = stmt.executeQuery(select);
			
			res.next();
			
			/* on sauvegarde les informations de l'image */
		    image = new InfoImage(res.getInt(1), res.getString(2), res.getString(3),res.getInt(4));
			
			stmt.executeUpdate("COMMIT");
			res.close();
			
			
		} catch (SQLException e) {
			System.out.println("Erreur");
			e.printStackTrace();
		}
		
		return image;		
		
	}
	
	/**
	 * Méthode permettant de gérer les informations d'une image lié à un album
	 * @param idImage      : Identifiant de l'image
	 * @param idAlbum      : Identifiant de l'album
	 * @param titre        : Titre de l'image dans l'album
	 * @param commentaire  : Commentaire de l'image dans l'album
	 * @param ordre        : Ordre de l'image dans l'album
	 * @param ancienOrdre  : Ancien Ordre de l'image dans l'album
	 */
	public static void gererInfoImage(int idImage , int idAlbum , String titre, String commentaire , int ordre ,int ancienOrdre){
		
		int ordreMax = Album.getMaxOrdre(idAlbum);
		
		
		String update = "UPDATE AlbumContient SET numOrdre = "+ (ordreMax+1) + " where  idAlbum = "+ idAlbum +" and numOrdre = "+ordre ;
		
		String update2 = "UPDATE AlbumContient SET titre = '"+titre+"', commentaire = '"+commentaire+"' , numOrdre = " + ordre+ " WHERE idAlbum = "+idAlbum+" and numOrdre = "+ ancienOrdre +" and idImage =  '"+idImage+"'";
		
		String update3 = "UPDATE AlbumContient SET numOrdre = "+ (ancienOrdre) + " where  idAlbum = "+ idAlbum +" and numOrdre = "+(ordreMax+1) ;
		
		try {
			/* Recuperation de la connection a la base de donnee */
			Statement stmt = Application.getStmt();
			
			int res = stmt.executeUpdate(update);
			int res2 = stmt.executeUpdate(update2);
			int res3 = stmt.executeUpdate(update3);
			
			
			if ( (res == 0)||(res2 == 0)||(res3 == 0) ){
				System.out.println("Erreur UPDATE SQL"); 
			}
			
			stmt.executeUpdate("COMMIT");
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}
